# 扫描指定目录下的图片，将其中的人脸识别出来
# import os
# import cv2
#
#
# def extract_faces(image_path, output_path):
#     # 读取图片
#     img = cv2.imread(image_path)
#
#     # 转换为灰度图片
#     gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#
#     # 使用CascadeClassifier加载训练好的模型
#     face_cascade = cv2.CascadeClassifier(
#         'C:\\Users\\wuhaohua\\AppData\\Roaming\\Python\\Python310\\site-packages\\cv2\\data\\haarcascade_frontalface_default.xml')
#
#     # 在图片中查找所有人脸
#     faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
#
#     # 在图片中绘制所有人脸的矩形框
#     for (x, y, w, h) in faces:
#         cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
#
#     # 保存带有矩形框的图片
#     cv2.imwrite(output_path, img)
#
#
# # 指定目录
# input_directory = os.getcwd() + '/in_img/'
#
# # 指定输出目录
# output_directory = os.getcwd() + '/out_img/'
#
# # 遍历目录下的所有图片
# for filename in os.listdir(input_directory):
#     # 获取图片路径
#     image_path = os.path.join(input_directory, filename)
#
#     # 获取输出路径
#     output_path = os.path.join(output_directory, filename)
#
#     # 提取图片中的人脸
#     extract_faces(image_path, output_path)


# 扫描指定目录下的图片，将其中的人脸识别出来，并单独保存成独立文件
import os
import cv2

# 指定目录
input_dir = os.getcwd() + '/in_img/'
# 指定目录下所有图片的列表
image_files = [f for f in os.listdir(input_dir) if f.endswith('.jpg') or f.endswith('.jpeg')]

# 指定目录
output_dir = os.getcwd() + '/out_img/'
# 如果不存在该目录，则创建该目录
if not os.path.exists(output_dir):
    os.makedirs(output_dir)

# 遍历所有图片
for image_file in image_files:
    # 读取图片
    img = cv2.imread(os.path.join(input_dir, image_file))
    # 转换为灰度图像
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # 使用CascadeClassifier加载训练好的模型
    face_cascade = cv2.CascadeClassifier(
        'C:/Users/wuhaohua/AppData/Roaming/Python/Python310/site-packages/cv2/data/haarcascade_frontalface_default.xml')
    # 检测人脸
    faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
    # 遍历检测到的人脸
    count = 0
    for (x, y, w, h) in faces:
        count += 1
        # 从原始图片中提取人脸
        face_img = img[y:y + h, x:x + w]
        # 将提取到的人脸保存到指定目录
        # cv2.imwrite(os.path.join(output_dir, image_file.replace('.jpg', '_face.jpg')), face_img)
        cv2.imwrite(os.path.join(output_dir, image_file.replace('.jpg', f"_face_{count}.jpeg")), face_img)
